package com.gxc.matrix;

import java.util.*;

/**
 * 学校组织活动，将学生排成一个矩形方阵。
 *
 * 请在矩形方阵中找到最大的位置相连的男生数量。
 *
 * 这个相连位置在一个直线上，方向可以是水平的，垂直的，成对角线的或者呈反对角线的。
 *
 * 注：学生个数不会超过10000
 *
 * 输入描述
 * 输入的第一行为矩阵的行数和列数，接下来的n行为矩阵元素，元素间用”,”分隔。
 *
 * 输出描述
 * 输出一个整数，表示矩阵中最长的位置相连的男生个数
 */
public class ManNumber {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] array = Arrays.stream(scanner.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();
        int row = array[0];
        int col = array[1];
        String[][] matrix = new String[row][col];
        for (int i = 0; i < row; i++) {
            String inputline = scanner.nextLine();
            String[] split = inputline.split(",");
            for (int j = 0; j < split.length; j++) {
                matrix[i][j] = split[j];
            }
        }
        scanner.close();

        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (matrix[i][j].equals("M")) {
                    getMaxConnected(matrix, i, j, res); // 在四个方向上搜索连续的M
                }
            }
        }

        Collections.sort(res);
        System.out.println(res.get(res.size() - 1));
    }

    // 定义四个方向的增量，分别表示：水平、垂直、对角线、反对角线
    private static final int[][] DIRECTIONS = {{0, 1}, {1, 0}, {1, 1}, {-1, 1}};

    private static void getMaxConnected(String[][] matrix, int i, int j, List<Integer> res) {
        int row = matrix.length, col = matrix[0].length; // 获取方阵的行数和列数

        for (int[] direction : DIRECTIONS) {
            int newRow = i + direction[0];
            int newCol = j + direction[1];
            int l = 1;

            while (newRow>=0 && newRow<row && newCol>=0 && newCol<col && matrix[newRow][newCol].equals("M")) {
                l++;
                newRow += direction[0];
                newCol += direction[1];
            }
            res.add(l);
        }
    }
}
